from pydantic_settings import BaseSettings, SettingsConfigDict
from typing import Optional
import secrets
import logging
from pydantic import Field

# 配置日志记录器
logger = logging.getLogger(__name__)

class Settings(BaseSettings):
    # JWT设置
    JWT_SECRET_KEY: str = "your-super-secret-key"  # 建议在生产环境中从环境变量加载
    JWT_ALGORITHM: str = "HS256"
    JWT_ACCESS_TOKEN_EXPIRE_MINUTES: int = 10080  # 7天 = 7 * 24 * 60分钟
    JWT_TOKEN_TYPE: str = "bearer"
    JWT_TOKEN_PREFIX: str = "Bearer"
    JWT_REFRESH_TOKEN_EXPIRE_MINUTES: int = 20160  # 14天，用于刷新token

    # MinIO设置
    MINIO_ENDPOINT: str  # 从环境变量加载
    MINIO_ACCESS_KEY: str  # 从环境变量加载
    MINIO_SECRET_KEY: str  # 从环境变量加载
    MINIO_BUCKET_NAME: str  # 从环境变量加载
    MINIO_SECURE: bool = False  # 默认不使用 HTTPS
    
    # 数据库设置
    DATABASE_URL: str  # 从环境变量加载
    DATABASE_POOL_SIZE: int = 5  # 默认连接池大小
    DATABASE_MAX_OVERFLOW: int = 10  # 默认最大溢出连接数
    
    # 应用设置
    # 使用Field别名将环境变量名称映射到属性名称
    preview_expiry_seconds: int = Field(default=3600, alias="PREVIEW_EXPIRY_SECONDS")  # 预览链接有效期（秒）
    download_expiry_seconds: int = Field(default=3600, alias="DOWNLOAD_EXPIRY_SECONDS")  # 下载链接有效期（秒）

    model_config = SettingsConfigDict(
        env_file=".env",
        case_sensitive=True,
        extra="allow",  # 允许额外的字段
        populate_by_name=True  # 允许使用别名填充字段
    )

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        logger.info("==== 配置加载信息 ====")
        logger.info(f"JWT Algorithm: {self.JWT_ALGORITHM}")
        logger.info(f"JWT Access Token Expire: {self.JWT_ACCESS_TOKEN_EXPIRE_MINUTES} minutes")
        logger.info(f"JWT Refresh Token Expire: {self.JWT_REFRESH_TOKEN_EXPIRE_MINUTES} minutes")
        logger.info(f"MinIO 端点: {self.MINIO_ENDPOINT} (从环境变量)")
        logger.info(f"MinIO Access Key: {self.MINIO_ACCESS_KEY} (从环境变量)")
        logger.info(f"MinIO Bucket: {self.MINIO_BUCKET_NAME} (从环境变量)")
        logger.info(f"MinIO Secure: {self.MINIO_SECURE} (从环境变量或默认值)")
        logger.info(f"数据库连接: {'已配置' if hasattr(self, 'DATABASE_URL') and self.DATABASE_URL else '未配置'}")
        logger.info(f"预览链接过期时间: {self.preview_expiry_seconds}秒")
        logger.info(f"下载链接过期时间: {self.download_expiry_seconds}秒") 
        logger.info("=====================")

try:
    settings = Settings()
except Exception as e:
    logger.error(f"加载配置失败: {str(e)}")
    logger.error("请确保 .env 文件存在并包含所有必要的配置项")
    raise 